package uade.distribuidas.server.dao;


import java.util.Date;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import uade.distribuidas.repo.exception.ExceptionCotizacion;
import uade.distribuidas.server.domain.Cotizacion;
import uade.distribuidas.server.hibernate.HibernateUtil;

public class CotizacionesDAO {

	private static CotizacionesDAO instancia = null;
	private static SessionFactory sf = null;

	public static CotizacionesDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new CotizacionesDAO();
		} 
		return instancia;
	}
	
	@SuppressWarnings("unchecked")
	public List<Cotizacion> getCotizaciones()throws ExceptionCotizacion{
		Session session = sf.openSession();
		
		List<Cotizacion> lista = session.createQuery("from Cotizacion").list();		
	
		
		session.close();
		return lista;
	}
	

	public Cotizacion getCotizacion(Integer id)throws ExceptionCotizacion{
		Session session = sf.openSession();
		
		Cotizacion c = (Cotizacion) session.createQuery("from Cotizacion where id = :id")
				.setParameter("id", id)
				.uniqueResult();			
		
		session.close();
		return c;
	}

	public Cotizacion save(Cotizacion c)throws ExceptionCotizacion {
		Session session = sf.openSession();
		 Transaction transaction = session.beginTransaction();
		 transaction.begin();
		 session.saveOrUpdate(c);
		 session.flush();
		 transaction.commit();
		 session.close();
		 return c;
	}

	public Cotizacion getCotizacionPorNumeroYFecha(String numero, Date fecha) {
		Session session = sf.openSession();
		
		Cotizacion c = (Cotizacion) session.createQuery("from Cotizacion where numero = :numero and fecha = :fecha")
				.setParameter("numero", numero)
				.setParameter("fecha", fecha)
				.uniqueResult();			
		
		session.close();
		return c;
	}
	
	

}
